package com.example.admin.testdemo.rs232;

import android.graphics.Color;
import android.util.Log;

import java.io.IOException;
import java.io.OutputStream;

/**
 * @author Created by admin on 2018/4/29.
 */

public class Cmd {
    private static String TAG = "Cmd";
    /**
     * 版本协议
     */
    public static byte versionCode = 0x10;
    /**
     * 格子机类型
     */
    public static byte TYPE_GZJ = 0x00;
    /**
     * 弹簧机类型
     */
    public static byte TYPE_THJ = 0x10;
    /**
     * 履带机类型
     */
    public static byte TYPE_LDJ = 0x30;


    /**
     * 查看主板状态
     *
     * @param addr 目标地址（0x00~0x08）
     * @return
     */
    public static byte[] queryMainboardStatus(int addr) {
//        3B B3 00 01 0A B9 04 00 00 00 00 00 00 00 00 3E
        byte[] cmd = new byte[16];
        cmd[0] = (byte) 0x3B;
        cmd[1] = (byte) 0xB3;
        cmd[2] = (byte) 0x00;
        cmd[3] = (byte) addr;
        cmd[4] = (byte) 0x0A;//数据长度
        cmd[5] = (byte) 0xB9;//命令码
        cmd[6] = (byte) 0x10;//协议版本
        cmd[7] = (byte) 0x00;//保留位
        cmd[8] = (byte) 0x00;//保留位
        cmd[9] = (byte) 0x00;//保留位
        cmd[10] = (byte) 0x00;//保留位
        cmd[11] = (byte) 0x00;//保留位
        cmd[12] = (byte) 0x00;//保留位
        cmd[13] = (byte) 0x00;//保留位
        cmd[14] = (byte) 0x00;//保留位
        cmd[15] = checksum(cmd);//校验和
        Log.e(TAG, Command.printByteInfo(cmd));
        Log.e("ThjTestActivity","send:"+ Command.printByteInfo(cmd));
        return cmd;
    }

    public static byte[] outGoodsDefaultCmd( int addr, int row, int line) {
        byte[] cmd = new byte[24];
        cmd[0] = (byte) 0x3B;
        cmd[1] = (byte) 0xB3;
        cmd[2] = (byte) 0x00;
        cmd[3] = (byte) addr;
        cmd[4] = (byte) 0x12;//数据长度
        cmd[5] = (byte) 0xA6;//命令码
        cmd[6] = versionCode;//协议版本
        cmd[7] = (byte) getRandomId();//流水号
        cmd[8] = (byte) 0x01;//货道类型
        cmd[9] = (byte) 0x00;//是否带升降机
        cmd[10] = (byte) 0x00;//是否带防盗版
        cmd[11] = (byte) 0x00;//货道编号方式
        cmd[12] = (byte) row;//行号
        cmd[13] = (byte) line;//列号
        cmd[14] = (byte) 0x03;//最大动作时间
        cmd[15] = (byte) 0x00;//掉货检测时间
        cmd[16] = (byte) 0x00;//升降台起始位置
        cmd[17] = (byte) 0x00;//升降台升降一层的时间
        cmd[18] = (byte) 0x00;//取货超时时间
        cmd[19] = (byte) 0x00;//防盗板开关超时时间
        cmd[20] = (byte) 0x00;//保留位
        cmd[21] = (byte) 0x00;//保留位
        cmd[22] = (byte) 0x00;//保留位
        cmd[23] = checksum(cmd);//校验和
        Log.e("ThjTestActivity", "发送："+Command.printByteInfo(cmd));
        return cmd;
    }

    /**
     * 设置货到每层的数量
     *
     * @param addr
     * @param rowTotal
     * @return
     */
    public static byte[] setRowNum(int addr, int rowTotal) {
//        3B B3 00 01 03 A5 10 0A 35
        byte[] cmd = new byte[9];
        cmd[0] = (byte) 0x3B;
        cmd[1] = (byte) 0xB3;
        cmd[2] = (byte) 0x00;
        cmd[3] = (byte) addr;
        cmd[4] = (byte) 3;//数据长度 命令吗+协议版本+数据长度
        cmd[5] = (byte) 0xA5;//命令码
        cmd[6] = versionCode;//协议版本
        cmd[7] = (byte) rowTotal;//数据
        cmd[8] = checksum(cmd);//校验和
        Log.e("ThjTestActivity", "发送："+Command.printByteInfo(cmd));
        return cmd;
    }


    public static byte[] setCtrlOutSignal(int addr, int rowTotal) {
        byte[] cmd = new byte[10];
        cmd[0] = (byte) 0x3B;
        cmd[1] = (byte) 0xB3;
        cmd[2] = (byte) addr;
        cmd[3] = (byte) 3;//数据长度 命令吗+协议版本+数据长度
        cmd[4] = (byte) 0xA5;//命令码
        cmd[5] = versionCode;//协议版本
        cmd[6] = (byte) rowTotal;//数据
        cmd[5] = checksum(cmd);//校验和
        return cmd;
    }


    /**
     * 校验和
     *
     * @param command
     * @return
     */
    public static byte checksum(byte[] command) {
        byte temp = 0x00;
        for (int i = 0; i < command.length - 1; i++) {
            temp = (byte) (temp ^ command[i]);
        }
        return temp;
    }

    /**
     * byte[]转String
     *
     * @param buffer
     * @return
     */
    public static String printByteInfo(byte[] buffer) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < buffer.length; i++) {
            sb.append(String.format("%02X ", buffer[i]));
            sb.append(" ");
        }
        return sb.toString();
    }

    //获取温度值
    public static String getTemperature(byte[] data){
        if(data.length<23){
            return "00.0 ℃";
        }
        StringBuffer sb = new StringBuffer();
        for (int i = 16; i < 20; i++) {
            sb.append(String.format("%c ",data[i]));
        }
        sb.append("℃");
        return sb.toString();
    }



    public static int random = 0;


    public static int getRandomId() {
        if (255 == random) {
            return random = 0;
        } else {
            return random += 1;
        }
    }
}
